home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / graphics / tierra40.arj / BEAGLE / DIVAVG.C < prev    next >
C/C++ Source or Header  |  1992-09-11  |  5KB  |  148 lines

  1. /* divavg.c  4-6-92  computes averages for diversity indices */
  2. /*** Version 1.0  Copyright (c) 1992  Tom Ray ***/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <math.h>
  8. #include <time.h>
  9. #include <ctype.h>
  10.  
  11. typedef unsigned long  Ulong;
  12.  
  13. struct siz {
  14.     long   Time;
  15.     long   NumCell;
  16.     long   NumSize;
  17.     float  SizeDiv;
  18.     long   AgeSize;
  19.     } si;
  20.  
  21. struct gen {
  22.     long   NumGeno;
  23.     float  GenoDiv;
  24.     long   AgeGeno;
  25.     } ge;
  26.  
  27. struct cum {
  28.     double  Time;
  29.     double  NumCell;
  30.     double  NumSize;
  31.     double  SizeDiv;
  32.     double  AgeSize;
  33.     double  NumGeno;
  34.     double  GenoDiv;
  35.     double  AgeGeno;
  36.     } cu;
  37.  
  38. void main (argc, argv)
  39. int  argc;
  40. char  **argv;
  41. {   char  ifile[30], ofile[30], bifile[30], format, data[100];
  42.     Ulong   otime = 0, ctime = 0;
  43.     int     binum = 1, genotypes;
  44.     double  ttime = 0;
  45.     FILE    *inf, *ouf;
  46.  
  47.     if(argc == 1)
  48.     {   printf (" Usage: %s in_file out_file\n",argv[0]);
  49.         exit (1);
  50.     }
  51.     if(argc == 2)
  52.         sprintf(ofile,"divavgs");
  53.     if(argc == 3)
  54.         sprintf(ofile,argv[2]);
  55.     strcpy(ifile,argv[1]);
  56.     sscanf(ifile,"%[^.]", bifile);
  57.     inf = fopen(ifile,"rb");
  58.     if(inf == NULL)
  59.     {   printf("\n Input File %s NOT found. \n", ifile);
  60.         exit(1);
  61.     }
  62.     ouf = fopen(ofile,"w");
  63.     fread(&format,sizeof(char),1,inf);
  64.     fread(&genotypes,sizeof(char),1,inf);
  65.     if(format)
  66.     {   fclose(inf);
  67.         inf = fopen(ifile,"r");
  68.         fgets(data,80,inf);
  69.     }
  70.     si.Time = 0.;
  71.     cu.Time    = 0.; cu.NumCell = 0.; cu.NumSize = 0.; cu.SizeDiv = 0.;
  72.     cu.AgeSize = 0.; cu.NumGeno = 0.; cu.GenoDiv = 0.; cu.AgeGeno = 0.;
  73.     printf("Time = %4ld million\r", ctime);
  74.     for(;;)
  75.     {   if(format)  /* ascii format */
  76.         {   if(fgets(data,80,inf) == NULL)
  77.             {   binum++;
  78.                 sprintf(ifile,"%s.%d", bifile, binum);
  79.                 fclose(inf);
  80.                 inf = fopen(ifile,"r");
  81.                 if(inf == NULL)
  82.                     break ;
  83.                 if(fgets(data,80,inf) == NULL)
  84.                     break ;
  85.             }
  86.             if(genotypes)
  87.                 sscanf(data,"%lx%ld%ld%f%lx%ld%f%lx",
  88.                     &si.Time, &si.NumCell, &si.NumSize, &si.SizeDiv,
  89.                     &si.AgeSize, &ge.NumGeno, &ge.GenoDiv, &ge.AgeGeno);
  90.             else
  91.                 sscanf(data,"%lx%ld%ld%f%lx", &si.Time, &si.NumCell,
  92.                     &si.NumSize, &si.SizeDiv, &si.AgeSize);
  93.         }
  94.         else  /* binary format */
  95.         {   if(!fread(&si,sizeof(struct siz),1,inf))
  96.             {   binum++;
  97.                 sprintf(ifile,"%s.%d", bifile, binum);
  98.                 fclose(inf);
  99.                 inf = fopen(ifile,"rb");
  100.                 if(inf == NULL)
  101.                     break ;
  102.                 if(!fread(&si,sizeof(struct siz),1,inf))
  103.                     break ;
  104.             }
  105.             if(genotypes)
  106.             fread(&ge,sizeof(struct gen),1,inf);
  107.         }
  108.         ttime += (double) si.Time;
  109.         ctime = (Ulong) ttime / 1000000uL;
  110.         if(ctime > otime)
  111.         {   printf("Time = %4ld million\r", ctime);
  112.             fflush(stdout);
  113.             otime = ctime;
  114.         }
  115.         cu.Time    += (double) si.Time;
  116.         cu.NumCell += (double) si.Time * si.NumCell;
  117.         cu.NumSize += (double) si.Time * si.NumSize;
  118.         cu.SizeDiv += (double) si.Time * si.SizeDiv;
  119.         cu.AgeSize += (double) si.Time * si.AgeSize;
  120.         if (genotypes)
  121.         {   cu.NumGeno += (double) si.Time * ge.NumGeno;
  122.             cu.GenoDiv += (double) si.Time * ge.GenoDiv;
  123.             cu.AgeGeno += (double) si.Time * ge.AgeGeno;
  124.         }
  125.     }
  126.     printf("\nTime    = %g\n", cu.Time);
  127.     printf("NumCell = %g\n", cu.NumCell / cu.Time);
  128.     printf("NumSize = %g\n", cu.NumSize / cu.Time);
  129.     printf("SizeDiv = %g\n", cu.SizeDiv / cu.Time);
  130.     printf("AgeSize = %g\n", cu.AgeSize / cu.Time);
  131.     if (genotypes)
  132.     {   printf("NumGeno = %g\n", cu.NumGeno / cu.Time);
  133.         printf("GenoDiv = %g\n", cu.GenoDiv / cu.Time);
  134.         printf("AgeGeno = %g\n", cu.AgeGeno / cu.Time);
  135.     }
  136.     fprintf(ouf, "\n\nTime    = %g\n", cu.Time);
  137.     fprintf(ouf, "NumCell = %g\n", cu.NumCell / cu.Time);
  138.     fprintf(ouf, "NumSize = %g\n", cu.NumSize / cu.Time);
  139.     fprintf(ouf, "SizeDiv = %g\n", cu.SizeDiv / cu.Time);
  140.     fprintf(ouf, "AgeSize = %g\n", cu.AgeSize / cu.Time);
  141.     if (genotypes)
  142.     {   fprintf(ouf, "NumGeno = %g\n", cu.NumGeno / cu.Time);
  143.         fprintf(ouf, "GenoDiv = %g\n", cu.GenoDiv / cu.Time);
  144.         fprintf(ouf, "AgeGeno = %g\n", cu.AgeGeno / cu.Time);
  145.     }
  146.     fclose(ouf);
  147. }
  148.